'''
@Project ：hdcms-scripts
@File    ：create_live.py
@IDE     ：PyCharm
@Author  ：朱广杰
@Date    ：2024/11/5 18:51
'''
from faker import Factory
import jsonpath
from common.hd_log import mylog
from common.hd_response import CaseResponse
from common.hd_exception import except_script_error
from datetime import datetime
from script.api.course.create_live import CopyCourseInfoApi, GetCourseIdApi, UpdateCourseApi, UpdateLiveInfoApi, \
    UpdateFlowHouseInfoApi, GetAskListoApi, OpenAskApi, SetMainRoomApi, SetRewardApi


@except_script_error
def create_live(course_name: str, preside_user_id: str,live_state: int, wish_type: int):
    """
        @api {post} /create_live 创建直播数据
        @apiGroup 课程
        @apiName create_live
        @apiDescription  创建直播数据
        @apiPermission zgj
        @apiParam {String=脚本创建直播课} course_name=脚本创建直播课 课程名称
        @apiParam {String=374a2b4762b7938337af9ddec0a3218a} preside_user_iD=374a2b4762b7938337af9ddec0a3218a 主持人ID
        @apiParam {int=2} live_state=2 直播状态
        @apiParam {int=3} wish_type=3 探索流分组模式
        @apiParamExample {json} 请求示例:
        {
                "preside_user_id": "374a2b4762b7938337af9ddec0a3218a",
                "course_name": "脚本创建直播课",
                "live_state": 2,
                "wish_type": 3
            }
        @apiSuccess (200) {Integer} responseCode 服务器码
        @apiSuccess (200) {String} responseMsg 提示语
        @apiSuccess (200) {Object} responseData 造数成功返回相关的数据
        @apiSuccessExample {json} 返回示例:
        {
            "responseCode": 0,
            "responseMsg": "请求成功",
            "responseData": {
                "course_id": "06449e94e532561125195db241d9aab3",
                "course_name": "重新定义真需求：用一个原创模型，解密中国商业崛起30年"
            }
        }
        """
    try:
        cci_resp = CopyCourseInfoApi().send()
        mylog.info(f'调用导入课程接口成功，接口返回是：{cci_resp.json()}')
        gci_resp = GetCourseIdApi().send()
        mylog.info(f'调用获取课程列表接口成功，接口返回是：{gci_resp.json()}')
        course_id = jsonpath.jsonpath(gci_resp.json(), '$..course_id')[0]
        mylog.info(f'获取到最新创建的课程ID，ID是：{course_id}')
        uc_resp = UpdateCourseApi(course_id=course_id, course_name=course_name).send()
        mylog.info(f'调用修改课程接口成功，接口返回是：{uc_resp.json()}')

        gci_resp = GetCourseIdApi().send()
        mylog.info(f'调用获取课程列表接口成功，接口返回是：{gci_resp.json()}')
        course_name = jsonpath.jsonpath(gci_resp.json(), '$..course_title')[0]
        mylog.info(f'获取到最新创建的课程名称，课程名称是：{course_name}')
        uli_resp = UpdateLiveInfoApi(course_id=course_id, live_state=live_state, preside_user_id=preside_user_id).send()
        mylog.info(f'进行直播配置数据编辑，接口返回是：{uli_resp.json()}')
        ufi_resp = UpdateFlowHouseInfoApi(course_id=course_id, wish_type=wish_type).send()
        mylog.info(f'进行探索流配置数据编辑，接口返回是：{ufi_resp.json()}')

        resp = GetAskListoApi(course_id=course_id).send()
        teacher_id = jsonpath.jsonpath(resp.json(), '$..teacher_id')[0]
        OpenAskApi(course_id=course_id, teacher_id=teacher_id, state=1).send()
        SetRewardApi(course_id=course_id, state=1).send()
        SetMainRoomApi(course_id=course_id).send()
    except Exception as e:
        mylog.error(f'脚本执行失败，失败原因：{e}')
        raise Exception(f'脚本执行失败，失败原因：{e}')
    res = {"course_id": course_id, "course_name": course_name}
    now_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    demo_log = f"""
[{now_time}]: 脚本开始 -> 进行一键新增直播数据
[{now_time}]: 脚本执行 -> 获取登录 token
[{now_time}]: 脚本执行 -> 调用导入课程接口
[{now_time}]: 脚本执行 -> 获取最新创建课程
[{now_time}]: 脚本执行 -> 选中课程编辑并上线
[{now_time}]: 脚本执行 -> 进行直播配置配置数据编辑
[{now_time}]: 脚本结束 -> 进行一键新增直播数据
"""
    return CaseResponse.success(data=res), demo_log
